#ifndef SERVER_H
#define SERVER_H

#include<QTcpServer>
#include<QObject>
#include"tcpclientsocket.h"

class Server : public QTcpServer
{
    Q_OBJECT
public:
    Server();
    //void processPendingDatagrams();//处理接收到的数据
    QList<TcpClientSocket*> socketlist;       //套接字链表，存放链接
    QHash<QString,TcpClientSocket*> userlist;          //用户表，存放用户名及其在套接字链表中的位置

protected:
    void incomingConnection(qintptr socketDescriptor);   //处理发送来的连接，重写父类的函数，

public slots:
    void updateClient(QByteArray,TcpClientSocket*);        //处理接收客户端发来的信息
    void slotDisconnected(TcpClientSocket*);               //断开连接

private:
    void login(QByteArray,TcpClientSocket*);  //登录处理

    void regedit(QByteArray,TcpClientSocket*); //注册处理

    void addfriend(QByteArray,TcpClientSocket*);   //添加好友处理

    void message(QByteArray,TcpClientSocket*);  //发送消息处理

    void quit(QByteArray,TcpClientSocket*);     //退出

    void online(QByteArray,TcpClientSocket*);   //上线

    void unline(QByteArray,TcpClientSocket*);   //离线

    void sendtoall(QByteArray,TcpClientSocket*); //群发消息
    void add(QByteArray,TcpClientSocket*); //添加好友/群
    void show(QByteArray,TcpClientSocket*);//显示一些信息
    void showavailuser(QByteArray,TcpClientSocket*);//显示一个用户没有添加为好友的用户的名字
    void showfriend(QByteArray,TcpClientSocket*);//显示当前用户所有好友的简略信息（包括备注，名字，状态）
    void sendsinglemsg(QByteArray,TcpClientSocket*);//发送消息给好友
    void showsinglechat(QByteArray,TcpClientSocket*);//显示指定的用户的聊天记录
    void creategroup(QByteArray,TcpClientSocket*);//创建群聊
    void showaddedgroup(QByteArray,TcpClientSocket*);//显示所有已加入的群聊
    void showavailgroup(QByteArray,TcpClientSocket*);//显示所有可以加入的群聊
    void addgroup(QByteArray,TcpClientSocket*);//加入群聊
    void showgroupchat(QByteArray,TcpClientSocket*);//显示指定群聊的消息
    void sendgroupmsg(QByteArray,TcpClientSocket*);//发送群聊消息
};
#endif // SERVER_H
